DS4IR

Text as Data

Professor Davi Moreira

Professor Rafael Magalhães

30-07-2020

Programa

  1. Text as data: o texto como dado
  2. R e o Processamento de Linguagem Natural
  3. Strings no R
  4. Obtenção de conteúdo
  5. Processamento dos dados
  6. Mineração e estatísticas básicas
  7. Escalonamento
  8. Classificação

Impeachment: análise de votos proferidos

impeachment

Text as data: o texto como dado

A análise de conteúdo possui grande relevância para as ciências sociais. Contudo, sua abordagem manual sempre limitou o volume de documentos sob análise. São raros os projetos que analisam grandes bases de dados.

MP

Manifesto Research Group

Text as data: oportunidades

O avanço tecnológico e científico permitiu que técnicas automatizadas de análise de conteúdo fossem desenvolvidas e aplicadas de forma simples a grandes acervos.

Biblioteca Florestan Fernandes

Novos acervos

CIA

CIA

Olhar o passado com as lentes do presente

RF

“automated content methods are incorrect models of language”

— (Grimmer and Stewart 2013, 2)

Text as data: premissas

  1. Todos os modelos quantitativos de análise de conteúdo estão errados, mas alguns são úteis;

  2. Métodos quantitativos de análise de conteúdo amplificam a capacidade humana, mas não a substitui;

  3. Não há um método global para a análise automatizada de conteúdo;

  4. Validar, validar, validar.

Quadro geral de metodologias

Grimmer

(Grimmer and Stewart, 2013)

Fluxo de análise

flow

Text Mining with R: a tidy approach

R e o Processamento de Linguagem Natural

  • O processamento de linguagem natural (NLP) é um subcampo da ciência da computação relacionado às interações entre computadores e a linguagem humana.

  • O R dispõe de uma série de pacotes dedicados a essa área e apresenta grande potencial ao conectar o processamento de linguagem natural a todo seu arcabouço de pacotes estatísticos.

Encoding - Codificação de caracteres

Caracteres são representados por algum tipo de sistema de codificação (Wiki).

Exemplo: código Morse que codifica as letras do alfabeto latino e os numerais como sequências de pulsos elétricos de longa e curta duração. Outro exemplo é o sistema de codificação UTF-8, capaz de codificar todos os 1.112.064 pontos de código válidos em Unicode usando até 8 bits.

Encoding - Codificação de caracteres

O R fornece funções para lidar com diferentes sistemas de codificação. Isso é útil se você lida com arquivos de texto que foram criados com outro sistema operacional e especialmente se o idioma não for o inglês e tiver muitos acentos e caracteres específicos.

Exemplo: o esquema de codificação padrão no Linux é UTF-8, enquanto o esquema de codificação padrão no Windows é Latin1.

Encoding - Codificação de caracteres

A função Encoding() retorna a codificação de uma sequência de caracteres. Por sua vez, a função iconv() é usada para converter a codificação. Vejamos:

Strings no R

Chamamos uma sequência de caracteres de string. Três coisas são importantes de serem lembradas aqui:

  1. Computadores não interpretam letras. No limite, todos os caracteres são transformados em sequências compostas por zeros e uns. Logo, é através de padrões que caracteres são interpretados e os computadores armazenam os dados que retornam a nossos olhos.

Strings no R

  1. Programar é escrever! Não é à toa que chamamos as formas de escrita em programação de linguagens de programação. O desafio de se trabalhar com o texto como dado é o de fazer com que o computador diferencie código escrito do “texto como dado” que ele precisará processar de acordo com os interesses do analista.

Strings no R

  1. O código e o texto é processado pelo computador: da esquerda para a direita e de cima para baixo. Logo, ao desenvolver seu script é importante ter atenção em relação à ordem de escrita para que o computador possa desempenhar corretamente suas tarefas.

Strings e vetores

Para declarar uma string, utilizamos aspas simples ' ou aspas dupla ".

O R é case sensitive

O R diferencia letras maiúsculas de letras minúsculas. Se compararmos os dois objetos criados acima, temos:

Sequências de caracteres

Operações básicas com vetores de strings

Processamento básico

  • nchar()
  • toupper(), tolower()

Processamento básico

  • Identificando caracter numa posição específica

Processamento básico

Processamento básico

Regular Expressions no R

Vimos funções básicas e intermediárias para o processamento de sequências de caracteres no R. Para avançar, é necessário aprender o uso de expressões regulares (Regular Expressions).

Regular Expressions: uma expressão regular é um conjunto de símbolos que descreve um padrão de texto. Mais formalmente, uma expressão regular é um padrão que descreve um conjunto de cadeias de caracteres.

  • Determinar cadeias de caracteres correspondentes a um padrão.
  • Encontrar as posições de padrões correspondentes.
  • Extrair o conteúdo de padrões correspondentes.
  • Substituir o padrão correspondente por novos valores.
  • Dividir uma sequência com base na correspondência de um padrão determinado.

Regular Expressions no R

O uso de expressões regulares pode se tornar uma tarefa realmente complexa. Veja esta discussão do StackOverflow a respeito de seu uso para identificação de endereços de e-mail, por exemplo.

Identificação e Extração de padrão

Identificação e Extração de padrão

Substituição

Âncoras

Por padrão, expressões regulares buscam por correspondência em qualquer parte de uma sequência de caracteres. Porém, é extremamente útil poder ancorar a busca pela correspondência no início ou no final de uma string. Podemos usar:

  • “^” para coincidir com o início da string.
  • “$” para coincidir com o final da string.

Exercício

Utilizando o operador | (“OU”), desenvolva código que identifique os elementos do vetor abaixo que contêm as palavras presidencialismo e parlamentarismo:

Exercício: resposta

Obtenção de conteúdo: Webscraping

Etapas para raspagem de dados na web:

  1. Conhecer detalhadamente o caminho para acesso aos dados
  2. Armazenar todos os caminhos de acesso aos dados de forma amigável ao programa
  3. Obter os dados
  4. Processar os dados obtidos

Obtenção de conteúdo: Webscraping

É possível conhecer o código fonte de um site ao clicar com o botão direito do mouse no conteúdo da página.

deputados

Discursos Deputados

Obtenção de Código Fonte:

Podemos facilmente obter o código fonte de um endereço na internet com o uso da função readLines.

Exercício

Com base no exemplo que vimos, obtenha o código fonte da página do Chico Buarque na Wikipédia.

Exercício: resposta

Obtenção de conteúdo em arquivo .pdf:

Obtenção de conteúdo em Imagens

No caso de textos em imagem é possível utilizar o optical character recognition (OCR). OCR é o processo de encontrar e reconhecer texto dentro de imagens, por exemplo, de uma captura de tela, texto digitalizado. A imagem abaixo tem um texto de exemplo:

ocr

Obtenção de conteúdo em Imagens

Com o pacote Tesseract e o uso da Interface de Programação de Aplicativos (API) do Google é possível capturar seu conteúdo:

Exercício

Utilizando a imagem do Tweet Fake atribuído ao Presidente Bolsonaro, obtenha seu conteúdo. Para tanto, é necessário instalar o acervo de treinamento em português com o seguinte comando tesseract_download('por').

Exercício: resposta

Obtenção de conteúdo: outras fontes

Processamento dos dados

Grimmer

(Grimmer and Stewart, 2013)

Mineração e estatísticas básicas

Mineração e estatísticas básicas

Avançando um pouco mais, já seria possível comparar o uso de palavras por diferentes deputados. Vamos comparar os deputados do PSOL, PT e do PSDB.

tf-idf

A quantificação de texto pode ser feito através da análiseda frequência das palavras que compõem o documento. Logo, uma medida seria a frequência de um termo (tf) em um documento.

Contudo, há palavras que ocorrem muitas vezes, mas podem não ser importantes. Podemos removê-las antes da análise, mas é possível que algumas dessas palavras sejam mais importantes em alguns documentos do que em outros.

tf-idf

Uma alternativa seria examinar a frequência de documento inversa de um termo (idf), o que diminui o peso das palavras comumente usadas e aumenta o peso das palavras que não são muito usadas em uma coleção de documentos.

Combinando as duas alternativas, calcula-se o tf-idf de um termo. Em outras palavras, a frequência de um termo ajustada pela frequência com que é usado no acervo.

tf-idf

Corpus

O pacote quanteda permite trabalhar com Tokens, Corpus e DFMs através do seguinte fluxograma:

quanteda_flow

Corpus

Filtrando corpus: corpus_subset()

A função corpus_subset() permite selecionar documentos em um corpus com base em variáveis no nível do documento.

Trocando a unidade de texto no corpus: corpus_reshape()

A função corpus_reshape() permite alterar a unidade de textos entre documentos, parágrafos e frases. Os textos podem ser restaurados para a unidade original mesmo que o corpus seja modificado por outras funções.

Tokens e Corpus

Obtendo Tokens a partir de um Corpus: tokens()

A função tokens() segmenta o texto.

Palavras-chave e seu contexto: kwic()

DFM

A função dfm() constrói uma matriz de documentos e termos/palavras/stems/tokens/features (DFM) a partir de um objeto de tokens.

Refinando a seleção de features

Agrupando e separando documentos numa DFM

Stemming

Até aqui, mesmo que os procedimentos adotados tenham diminuído a dimensionalidade do acervo de documentos ao transformá-lo em uma sacola de palavras (bag of words), ainda é necessária a adoção de procedimentos que possam reduzir a complexidade do conteúdo a ser analisado.

Stemming

Com esse objetivo, podemos pensar que determinado documento tenha em sua composição as seguintes palavras únicas: trabalho, trabalhador, trabalhista. Apesar de seus diferentes signficados, cada uma dessas palavras pode ser reduzida ao seu radical, trabalh, dando ao pequisador informações suficientes para sua análise e, assim reduzindo, o n de três palavras únicas para uma palavra que tem a soma das frequências anteriores.

Stemming

Chamamos esse procediment de Stemming. O pacote quanteda possui a opção de stemming da DFM em português que usa o projeto Snowball através da função dfm_wordstem().

Vamos aplicar o stemming para produzir a dfm que nos será útil daqui em diante.

Nuvem de palavras

Uma comum da visualização de frequência na análise de texto é a nuvem de palavras.

Escalonamento

quadro-grimmer

Escalonamento

voteview

Projeto Voteview

Escalonamento

A utilização da análise quantitativa de textos para a extração de posições políticas/ideológicas de partidos, políticos e eleitores é uma área extremamente promissora. O teste de modelos de competição partidária, por exemplo, depende do conhecimento das posições dos principais atores envolvidos no jogo político.

As duas técnicas mais populares são o Wordscores e o Wordfish.

Wordscores

O Wordscores é um algoritmo supervisionado para estimar posições políticas. Nessa família de algoritmos, são apresentados ao computador alguns dados de entrada e as saídas esperadas. Chamamos esse conjunto de entradas e saídas de training set. A partir desse conjunto de informações o algoritmo “aprende” a classificar novos documentos, o conjunto do test set.

Para nosso exemplo, vamos usar manifestos das eleições federais alemãs de 2013 e 2017. Para as eleições de 2013, temos as avaliações médias de especialistas para os cinco principais partidos e prevemos as posições dos partidos nos manifestos de 2017.

Wordscores

Wordscores: Críticas e potenciais problemas

Embora o Wordscores constitua um grande avanço na análise quantitativa de textos, ele não é livre de problemas.

  1. O principal é o fato de ele depender fortemente da escolha dos textos de referência ( training set ). Em situações extremas é possível que, com a escolha diferente de textos de referência, um mesmo pesquisador encontre resultados diferentes para um mesmo conjunto de dados.

  2. A segunda limitação é a possibilidade de as diferenças entre os textos estarem mais relacionadas com o estilo linguístico do autor do que com as posições políticas. Como todas as palavras adicionam a mesma quantidade de informação sobre o documento, temos que palavras politicamente relevantes em um contexto sejam igualmente ponderadas a palavras pouco informativas.

Wordfish

A segunda técnica mais popular para estimar posições políticas a partir de textos é o Wordfish (SLAPIN; PROKSCH, 2008). Ao contrário do Wordscores, esse é um algoritmo não supervisionado, pois não depende da escolha de textos de referência, ou seja, da construção de um training set. Dessa forma, diminui muito a chance de obtenção de resultados diferentes a partir do mesmo conjunto de dados em razão da amostra de treinamento.

Vamos novamente usar um exemplo do pacote quanteda. Nesse exemplo, serão utilzados os os discursos orçamentários irlandeses de 2010.

Wordfish

Wordfish

Críticas e potenciais problemas

A limitação desse modelo é o fato de ele necessitar que os documentos cubram uma grande quantidade de temas para extrair as posições ideológicas. Assim, se os parlamentares focarem seus discursos em determinadas áreas temáticas, provavelmente não teremos resultados consistentes ao aplicarmos o Wordfish. Como a variação no uso das palavras não será determinada pelas preferências políticas, mas pelos tópicos, a diferença nas posições estimadas também refletirá essa diferença. Outro aspecto, compartilhado com o Wordscore, é a possível mudança nos resultados a depender do tratamento dado aos textos no pré-processamento.

Classificação

A classificação automatizada organiza o acervo de documentos em categorias, sejam elas conhecidas ou não.

quadro-grimmer

Categorias conhecidas

Ancorados na teoria, na experiência ou especialidade em determinado assunto pode-se desejar classificar um acervo de documentos em categorias já conhecidas.

  • Métodos de aprendizagem supervisionada

Métodos de aprendizado supervisionado replicam a familiar tarefa de codificação manual, porém com enorme redução de custos e grande ganho de escala. Sua implementação pressupõe a classificação manual de uma amostra do acervo em um conjunto predeterminado de categorias. Essa amostra classificada, conhecida como conjunto de treinamento ou training set, é usada para treinar modelos estatísticos, cuja principal aplicação é a classificação do restante do acervo, conjunto de teste ou test set, nas categorias predeterminadas. Ao final da classificação, procedimentos de validação devem ser adotados para se averiguar a performance do modelo utilizado.

Categorias desconhecidas

Não é difícil encontrar situações nas quais o conjunto de categorias não seja conhecido. Pode, por exemplo, ser do interesse de um pesquisador identificar quais tópicos são enfatizados pelos deputados federais nos discursos proferidos ao longo de legislaturas. Uma vez que a atividade do representante político se debruça sobre inúmeras esferas da sociedade e da vida, predeterminar categorias temáticas de fala dos deputados federais pode limitar o conhecimento a ser obtido sobre o acervo. Para enfrentar esse desafio, veremos exemplos de aplicação do aprendizado não supervisionado (unsupervised learning methods).

Topic Models

Os modelos de tópicos possuem duas principais características:

  1. definem estatisticamente um tópico como função densidade de probabilidade sobre palavras. Para um tópico \(k\) \((k=1,\dots,K)\), essa função de probabilidade é representada com um vetor \(M\times 1\), \(\theta_k\), em que \(\theta_{mk}\) descreve a probabilidade de o \(k-ésimo\) tópico usar a \(m-ésima palavra\). Logo, para estimar um tópico, os modelos usam a ocorrência de palavras entre documentos e pressupõem, em sua grande maioria, o uso da DTM/DFM obtida através do pré-processamento dos dados.

Topic Models

  1. os modelos de tópicos compartilham uma estrutura hierárquica básica.

topic_models

O texto como dado: desafios e oportunidades para as ciências sociais

Topic Models

Como apontam Grimmer e Stewart (2013), todos os métodos de aprendizagem supervisionada pressupõem duas etapas básicas após os procedimentos de pré-processamento:

1. Definindo o número \(k\) de categorias

2. Validação: Um exemplo de aplicação desses dois tópicos será visto na apresentação do Expressed Agenda Model.

Latent Dirichlet Allocation - LDA

O Latent Dirichlet Allocation (LDA) (BLEI; NG; JORDAN, 2003) é um método popular Probabilistic Topic Models para modelagem de tópicos. Ele trata cada documento como uma mistura de tópicos e cada tópico como uma mistura de palavras. Isso permite que os documentos “se sobreponham” uns aos outros em termos de conteúdo, em vez de serem separados em grupos distintos.

Para aplicação do LDA, faremos uso do pacote topicmodels, que implementa o modelo desenvolvido por BLEI, NG e JORDAN (2003) através de um exemplo do pacote quanteda.

Latent Dirichlet Allocation - LDA

Vamos para o código.

Expressed Agenda Model

leviatan

Expressed Agenda Model

romario-jogador

Expressed Agenda Model

romario-deput

Expressed Agenda Model

exp-agenda

Expressed Agenda Model

paper-dados

Com a Palavra os Nobres Deputados

Expressed Agenda Model

retorica-parlamentar

Retórica Parlamentar

Material adicional

txt4cs

txt4cs

Material adicional

Tarefa da aula

As instruções da tarefa estão no arquivo NN-class-ds4ir-assignment.rmd da pasta assignment que se encontra na raiz desse projeto.